# ==============================================
# 导入层
# ==============================================
from . import config as config_module                        # 导入配置模块中的全局变量
from .Android_intent import open_uri_activity                # 导入Android_intent模块
from ascript.android.screen import FindColors                # 导入颜色识别模块
from .lanying_HID import BlueHid                             # 导入已加载的蓝影键鼠模块
from ascript.android.system import Device                    # 获取系统信息
import time                                                  # 时间操作模块（用于延时、计时等）
from ascript.android.node import Selector                    # 导AS控件包（用于安卓界面控件选择操作）
from .Dialogue_collection import process_xiaohongshu_chat    # 导入对话收集模块
# from .feishu_api import add_log_data                         # 导入飞书API日志模块 



# ==============================================
# 封装层
# ==============================================

# 获取屏幕信息
display = Device.display()
# 屏幕宽度
wide = display.widthPixels
# 屏幕高度
High = display.heightPixels

# 封装蓝牙HID键鼠控件实现稳当滑动
def scroll_screen(direction='up', scroll_pixels=300, press_delay=100, scroll_duration=3000, lift_delay=50):
    """控制蓝牙键鼠执行像素级滚动操作
    参数：
        direction: str 滚动方向，可选 'up'（上滑）/'down'（下滑）
        scroll_pixels: 滚动像素数（默认300像素）
        press_delay: int 按下延迟（单位：毫秒，默认0 建议写0,如果想拖动,可以写50~100）
        scroll_duration: int 滚动持续时间（单位：毫秒，根据像素动态计算)
        lift_delay: int 抬起延迟（单位：毫秒，默认0 建议写0写10~50 不写默认0）
    返回：
        None 通过蓝牙HID直接控制设备操作
    """
    # 参数有效性检查
    if direction not in ['up', 'down']:
        print(f"警告：{direction} 不是有效方向，默认使用'up'")
        direction = 'up'

    # 动态计算滚动时长（每像素5ms的滑动速度）
    # scroll_duration = int(scroll_pixels * 5)

    start_x = int(wide * 0.5)
    start_y = int(High * 0.5)

    # 根据方向计算终止坐标
    if direction == 'up':
        end_y = start_y - scroll_pixels
    else:
        end_y = start_y + scroll_pixels  # 向下滑动时增加Y坐标值

    # 执行蓝牙HID滚动操作（使用蓝影智连模块）
    BlueHid.swipEx(
        start_x, start_y,  # 起始坐标（屏幕正中心）
        start_x, end_y,  # 终止坐标（Y轴偏移）
        press_delay,  # 参数化按下延迟
        scroll_duration,  # 动态计算的滚动持续时间
        lift_delay  # 参数化抬起延迟
    )



#识别陌生人消息
def handle_stranger_message():

    # 打开小红书陌生人消息页面
    web_window=open_uri_activity("xhsdiscover://message/strangers")

    # 等待页面加载完成（必须，否则无法获取数据）
    time.sleep(2)

    
    if web_window:
        print("[处理陌生人消息] 打开小红书陌生人消息页面成功")
        
        # 循环查找计数初始化
        max_search_attempts = int(config_module.stranger_page)       # 陌生人消息查询页数
        messages_processed = 0

        for attempt in range(max_search_attempts):

            # 识别颜色,找未读消息小红点的坐标
            points = FindColors.find_all("1014,530,#FF2442|1027,540,#FF2442|1027,556,#FF2442|1014,563,#FF2442|1000,555,#FF2442|998,543,#FF2442|1001,535,#FF2442|1006,531,#FF2442|1006,531,#FF2442",diff=0.95,space= 30)
            
            if points:
                print(f"[处理陌生人消息] 找到 {len(points)} 个陌生人未读消息小红点")

                # 遍历 x坐标 和 y坐标
                for i, p in enumerate(points, 1):
                    print(f"[处理陌生人消息] 点击小红点未读消息 [{i}/{len(points)}]，位置: ({p.x}, {p.y})")

                    # 实现点击重试机制，最多尝试3次
                    click_success = False
                    max_attempts = 3
                    
                    for attempt in range(max_attempts):
                        print(f"[处理陌生人消息] 尝试第 {attempt+1} 次点击小红点")
                        BlueHid.click(p.x, p.y)     # 点击小红点
                        time.sleep(1)  
                        
                        if Selector(6).type("EditText").find():

                            print(f"[处理陌生人消息] ✓ 第 {attempt+1} 次点击成功，进入聊天页面")

                            click_success = True

                            time.sleep(2)           # 等待画面稳定/调用消息回传函数

                            # 调用未读消息处理功能
                            result = process_xiaohongshu_chat()

                            # BlueHid.back()              # 返回陌生人消息页面，仅测试开启
                            time.sleep(1.5)             # 等待画面稳定
                                                    
                            messages_processed += 1     # 计数
                            break
                        else:
                            print(f"[处理陌生人消息] ✗ 第 {attempt+1} 次点击失败，未进入聊天页面")
                            if attempt < max_attempts - 1:
                                print("[处理陌生人消息] 准备重试...")
                    
                    if not click_success:
                        print(f"[处理陌生人消息] 警告：经过 {max_attempts} 次尝试后仍无法成功点击，放弃处理此消息")
                    
            else:
                print(f"[处理陌生人消息] 第 {attempt+1} 次查找未发现小红点，执行向下滑动...")

                scroll_screen('up', 800, 100, 3000, 50)       # 向上滑动
                time.sleep(1.5)                               # 滑动后等待画面稳定   

            
            print(f"[处理陌生人消息] 共处理了 {messages_processed} 条消息，已完成{number}次查找")

    else:
        print("[处理陌生人消息] 打开小红书陌生人消息页面失败")




#==============================================
# 主程序
#==============================================
if __name__ == "__main__":
    
    # 配置参数
    handle_stranger_message()